package modelo.MetodosNumericos;

import modelo.abstraccionesGeometricas.Intervalo;
import modelo.abstraccionesGeometricas.Punto;
import modelo.funciones.Funcion;

public class SeccionDorada {
    public static Punto CalcularMaximoOminimo(Funcion funcion, Intervalo interv, int modo) {

	    double a = interv.getComienzo();
	    double b = interv.getFinal();
	    double solucion = 0;
	    double x1, x2,Error;
	    double tol = 0.000001;
	    Double r = 0.618;
	    Error = (1 - r) * (b - a);
	    while (tol < Error) {
	        x1 = a + r * (b - a);
	        x2 = b - r * (b - a);
	
	         if (modo * funcion.evaluar(x1) > modo * funcion.evaluar(x2)) {
	            a = x2;
	            Error = b - x1;
	            solucion = x1;
	         }
	        else {
	            b = x1;
	            Error = x1 - x2;
	            solucion = x2;
	        }
	    }
	    return new Punto(solucion,funcion.evaluar(solucion));
    }
}
